﻿namespace los13
{
    #region     知识点一   基本概念
    //里氏替换原则是面向对象七大原则中最重要的原则
    //概念
    //任何父类出现的地方 子类都可以替代
    //重点
    //语法表现——父类容器装子类对象  因为子类对象包含了父类的所有内容
    //作用
    //方便进行对象存储和管理
    #endregion

    #region     知识点二   基本实现
class Gamesubject
    {

    }

    class Player:Gamesubject
    {
        public int sz1 ;
    }
    class Monster:Gamesubject
    {
        public int sz2 ;
    }

    #endregion
    internal class class13
    {
        static void Main(string[] args)
        {
            Console.WriteLine("里氏替换原则");
            //里氏替换原则  用父类容器 装载 子类对象
            Gamesubject player = new Player();
            Gamesubject monster = new Monster();

            Gamesubject[] objects =new Gamesubject [] { new Player(),new Monster()};

            //直接用父类点是点不出来的（不能直接使用）所以↓
            #region      知识点三   is和as
            //基本概念
            //is:判断一个对象是否是指定类对象
            //返回值：bool 是为真，不是为假
            //if(player is Player)//判断变量是否为子类
            //{

            //}

            //as:将一个对象转换为指定类对象
            //返回值：指定类型对象
            //成功返回值指定类型对象，失败返回null
            //Player p = player as Player;//返回null

            //基本语法
            //类对象 is 类名  该语句块 会有一个bool返回值 true和false
            //类对象 as 类名  该语句块 会有一个对象返回值 对象和null
            //注意：这俩一般配合使用
            if(player is Player)
            {
                //第一种写法
                Player p = player as Player;
                p.sz1 = 10;

                //第二种写法
                //(player as Player).sz1 = 10;
            }
            #endregion

            //总结
            //概念：父类容器装子类对象
            //作用：方便进行对象的存储和管理
            //使用：is、as
            //is 用于判断
            //as 用于转换
            //注意：不能用子类容器装父类对象
        }
    }
}
